Golang 的 map,有蠻多小細節要注意的,例如thread safe相關的問題....
map 其實就是一個 key and value 的結構
package main
import (
"fmt"
)
var (
a map[string]string
)
func main() {
a = make(map[string]string)
a["s"] = "say"
a["b"] = "ball"
fmt.Println(a)
}
https://play.golang.org/p/iWJwS3_s9sv
或是也能這樣宣告
package main
import (
"fmt"
)
func main() {
a := make(map[string]string)
a["s"] = "say"
a["b"] = "ball"
fmt.Println(a)
}
https://play.golang.org/p/KNO5tfeOQjv
或是直接初始化也行
package main
import (
"fmt"
)
func main() {
a := map[string]string{
"s": "say",
"b": "ball",
}
fmt.Println(a)
}
https://play.golang.org/p/-3SzzHugfN4
當然它也可以支援巢狀式宣告
package main
import (
"fmt"
)
var (
a map[string]map[string]string
)
func main() {
a = make(map[string]map[string]string)
a["s1"] = map[string]string{
"a1": "apple",
}
fmt.Println(a)
}
https://play.golang.org/p/rD4av2oxLe0
golang的 map,並沒有thread safe,但是他在
1.9
之後有在sync套件中新增另一種型別的map有支援thread safe。
關於如何在golang中,如何安全的存取map,在後面講到gorotuine的時侯會介紹到。